use std::io;

use crate::base_socket_client::BaseSocketClient;

// 使用struct代替Python中的类
pub struct SetupCmd3 {
    pub send_pkg: Vec<u8>, // 使用Vec<u8>代替Python中的bytearray
}

impl SetupCmd3 {
    // 构造函数，用于初始化SetupCmd3实例
    pub fn new() -> SetupCmd3 {
        let send_pkg_hex = "0c 03 18 99 00 01 20 00 20 00 db 0f d5 d0 c9 cc d6 a4 a8 af 00 00 00 8f c2 25 40 13 00 00 d5 00 c9 cc bd f0 d7 ea 00 00 00 02".replace(char::is_whitespace, "");
        let send_pkg_bytes = hex::decode(send_pkg_hex).unwrap(); // 使用hex库解码十六进制字符串
        SetupCmd3 {
            send_pkg: send_pkg_bytes,
        }
    }

    // 对应Python中的setup方法
    pub fn setup(&mut self) {
        // 如果setup方法中有其他逻辑，可以在这里添加
    }

    pub async fn call_api(self, client: &mut BaseSocketClient) -> Result<Vec<u8>, io::Error> {
        let rs = client.send(&self.send_pkg).await?;
        let rs = client.recv().await?;
        let rs = self.parse_response(&rs);
        Ok(rs)
    }

    // 对应Python中的parseResponse方法
    fn parse_response(&self, body_buf: &[u8]) -> Vec<u8> {
        // 在这个例子中，我们简单地返回输入的body_buf。如果需要解析，可以在这里添加逻辑。
        body_buf.to_vec()
    }
}
